<template>
  <div>
    <input
      type="file"
      @change="handleFileUpload"
      accept="application/pdf" />
    <div v-if="pageCount !== null">总页数: {{ pageCount }}</div>
    <div v-if="error">{{ error }}</div>
    <div v-if="loading">解析中...</div>
  </div>
</template>

<script setup>
import { ref } from "vue";
import * as pdfjsLib from "pdfjs-dist";

// 设置 worker 路径（重要！）
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
  "pdfjs-dist/build/pdf.worker.min.mjs",
  import.meta.url
).toString();

// const pageCount = ref(null);
// const loading = ref(false);
// const error = ref("");

// const handleFileUpload = async (event) => {
//   const file = event.target.files[0];
//   if (!file) return;

//   loading.value = true;
//   error.value = "";
//   pageCount.value = null;

//   try {
//     const arrayBuffer = await file.arrayBuffer();
//     const pdf = await pdfjsLib.getDocument(arrayBuffer).promise;
//     pageCount.value = pdf.numPages;
//     let hasText = false;
//     let hasImage = false;

//     // 遍历所有页面（可根据需求限制解析的页数）
//     for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {
//       const page = await pdf.getPage(pageNum);
//       const opList = await page.getOperatorList();
//       // 检测是否存在文本操作符（如 'TJ', 'Tj'）
//       if (opList.fnArray.some((fn) => fn === pdfjsLib.OPS.showText)) {
//         hasText = true;
//       }

//       // 检测是否存在图像操作符（如 'Do' 表示外部对象，通常是图像）
//       if (opList.fnArray.some((fn) => fn === pdfjsLib.OPS.paintImageXObject)) {
//         hasImage = true;
//       }

//       // 提前终止检测（如果已发现文本和图像）
//       if (hasText && hasImage) break;
//     }
//     if (hasText && hasImage) {
//       console.log("是双层pdf");
//     } else {
//       console.log("不是双层pdf");
//     }
//   } catch (err) {
//     error.value = "无法解析 PDF 文件";
//     console.error("解析失败:", err);
//   } finally {
//     loading.value = false;
//   }
// };
const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB
const pageCount = ref(null);
const loading = ref(false);
const error = ref("");
let abortController = null;

const handleFileUpload = async (event) => {
  const file = event.target.files[0];
  if (!file) return;

  // 取消之前的任务
  if (abortController) {
    abortController.abort();
  }
  abortController = new AbortController();

  // 重置状态
  loading.value = true;
  error.value = "";
  pageCount.value = null;

  try {
    // 文件大小校验
    if (file.size > MAX_FILE_SIZE) {
      throw new Error("文件过大，请上传小于 50MB 的 PDF");
    }
    console.log("file",file)
    // 读取文件并解析
    const arrayBuffer = await file.arrayBuffer({
      signal: abortController.signal,
    });
    const pdf = await pdfjsLib.getDocument(arrayBuffer).promise;
    pageCount.value = pdf.numPages;

    // 主动释放资源
    pdf.destroy();
  } catch (err) {
    if (err.name === "AbortError") {
      error.value = "解析已取消";
    } else {
      error.value = err.message || "无法解析 PDF 文件";
    }
  } finally {
    loading.value = false;
    abortController = null;
  }
};
</script>
